package cn.j0n4than.accountingtool.service;

import cn.j0n4than.accountingtool.entity.Spending;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.math.BigDecimal;
import java.util.List;

/**
 * 消费服务接口
 *
 * @author jonathan
 */
public interface SpendingService {

    /**
     * 插入数据
     *
     * @param spending Spending对象实例
     * @return 影响行数
     */
    Integer insert(Spending spending);

    /**
     * 获取消费分页列表
     *
     * @param spending 消费实体对象
     *                 这里这是查询条件
     * @param page     页码
     * @param size     页数据
     * @return Page
     */
    Page<Spending> getPage(Spending spending, Integer page, Integer size);

    /**
     * 获取消费带类型信息的分页列表
     *
     * @param spending 消费实体对象
     *                 这里这是查询条件
     * @param page     页码
     * @param size     页数据
     * @return Page
     */
    Page<Spending> getPageWithType(Spending spending, Integer page, Integer size);

    /**
     * 获取近期消费
     *
     * @param userId 某个用户的
     * @param limit  获取数据条数
     * @return List
     */
    List<Spending> getTopData(Integer userId, Integer limit);

    /**
     * 获取消费金额
     *
     * @param spending 消费实体对象
     *                 这里这是查询条件，但是userId字段不会从这里读取，如果要以userId字段查询
     *                 给userId参数传惨
     * @return BigDecimal
     */
    BigDecimal getSpendingAmount(Spending spending);

    /**
     * 获取今日支出金额
     *
     * @param userId 用户ID
     * @return BigDecimal
     */
    BigDecimal getSpendingAmountToday(Integer userId);

    /**
     * 获取本周支出金额
     *
     * @param userId 用户ID
     * @return BigDecimal
     */
    BigDecimal getSpendingAmountThisWeek(Integer userId);

    /**
     * 获取本月支出金额
     *
     * @param userId 用户ID
     * @return BigDecimal
     */
    BigDecimal getSpendingAmountThisMonth(Integer userId);
}
